﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;


//链表内指定区间反转
//https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c?tpId=188&&tqId=38555&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking

// struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) 
// {
    // if(head->next==NULL||head == NULL)
        // return head;

    // struct ListNode *curm = NULL, *curn = NULL;
    // for(struct ListNode *cur = head; cur; cur=cur->next)
    // {
        // if(!(--m))
        // {
            // curm = cur;
        // }
        // if(!(--n))
        // {
            // curn = cur;
        // }
    // }
    // if(curm && curn)
    // {
        // struct ListNode * cur = curm;
        // while(curn->next!=curm && curm != curn)
        // {
            // int tmp = curn->val;
            // curn->val = curm->val;
            // curm->val = tmp;
            // curm = curm->next;
            // while(cur->next!=curn)
            // {
                // cur = cur->next;
            // }
            // curn = cur;
            // cur = curm;
        // }
    // }
    // return head;
// }











//从链表中删去总和值为零的连续节点
//https://leetcode.cn/problems/remove-zero-sum-consecutive-nodes-from-linked-list/
// void DesInterval(struct ListNode* head, struct ListNode* endnext)//销毁区间函数
// {
    // while (head != endnext && !head)
    // {
        // struct ListNode* freenode = head;
        // head = head->next;
        // free(freenode);
    // }
// }

// struct ListNode* removeZeroSumSublists(struct ListNode* head)
// {
    // if (!(head->next))//只有一个节点
    // {
        // if(head->val==0)
        // {
            // free(head);
            // head=NULL;
            // return head;
        // }
        // else
        // {
            // return head;
        // }
    // }

    // struct ListNode* cur = head;
    // while (cur)//开始寻找一串等于0的节点
    // {
        // int num = 0;
        // struct ListNode* curi = cur;
        // int flag = 0;
        // while (1)//死循环找
        // {
            // num += curi->val;//连加节点数
            // if (!num)//如果num为0则标记flag退出
            // {
                // flag = 1;
                // break;
            // }
            // if (!curi->next)//curi遍历到空则退出
            // {
                // break;
            // }
            // curi = curi->next;
        // }
        // if (flag)
        // {
            // struct ListNode* curprev = head;
            // if (curprev != cur)//如果不在表头则找区间开始的前一个
            // {
                // while (curprev->next != cur)//找区间的前一个
                // {
                    // curprev = curprev->next;
                // }
            // }
            // if (curi->next)//如果被删区间的后面还有节点存在
            // {
                // struct ListNode* freenode = curprev->next;//截取删除的起始区间
                // if (cur == head)
                // {
                    // freenode = head;
                    // head = curi->next;
                // }
                // else
                // {
                    // curprev->next = curi->next;//链接被删区间外的链表
                // }
                // DesInterval(freenode, curi);//删除区间
                // cur = head;
            // }
            // else
            // {
                // if(cur == head)//删除全部链表
                // {
                    // head = NULL;
                    // DesInterval(cur, NULL);//删除整个链表
                    // return head;
                // }
                // else
                // {
                    // DesInterval(curprev->next, NULL);//删除整个链表
                    // curprev->next=NULL;
                    // return head;
                // }
                
            // }
        // }
        // else
        // {
            // cur = cur->next;
        // }
    // }
    // return head;
// }
